package 链表;

import java.util.Deque;
import java.util.LinkedList;

/*
* 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 0 之外，这两个数字都不会以零开头。

 

进阶：

如果输入链表不能修改该如何处理？换句话说，你不能对列表中的节点进行翻转。

 

示例：

输入：(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出：7 -> 8 -> 0 -> 7

* 总结：逆序一般使用栈
* 有无进位就是通过/10 和%10来判断
* 采用头插法和链表倒序是一个道理
* */
public class 链表两数相加 {
    public static void main(String[] args) {
//        Deque<Integer> stack1 = new LinkedList<Integer>();
//        Deque<Integer> stack2 = new LinkedList<Integer>();
//        while (l1 != null) {
//            stack1.push(l1.val);
//            l1 = l1.next;
//        }
//        while (l2 != null) {
//            stack2.push(l2.val);
//            l2 = l2.next;
//        }
//        int carry = 0;
//        ListNode ans = null;


//        while (!stack1.isEmpty() || !stack2.isEmpty() || carry != 0) {
//            int a = stack1.isEmpty() ? 0 : stack1.pop();
//            int b = stack2.isEmpty() ? 0 : stack2.pop();

        //carry是保证进位的 只会为0和1 并且每次更新
//            int cur = a + b + carry;
        //有进位就是1 无进位就是0
//            carry = cur / 10;
//            cur %= 10;

        //采用的是头插法 顺序是倒过来的
//            ListNode curnode = new ListNode(cur);
//            curnode.next = ans;
//            ans = curnode;
//        }
//        return ans;

    }
}
